public class MaximumProductSubarray {
    /**
     *给你一个整数数组 nums，请你找出数组中乘积最大的非空连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
     * 测试用例的答案是一个32-位 整数。
     * 子数组 是数组的连续子序列。
     * 链接：https://leetcode-cn.com/problems/maximum-product-subarray
     * @param nums
     * @return
     */
    public int maxProduct(int[] nums) {
        int maxF = nums[0];
        int minF = nums[0];
        int ans = nums[0];
        int length = nums.length;
        for (int i=1;i<length;i++){
            int maxf = maxF;int minf = minF;
            maxF= Math.max(maxf*nums[i],Math.max(nums[i],minf*nums[i]));
            minF =Math.min(minf*nums[i],Math.min(nums[i],maxf*nums[i]));
            ans = Math.max(ans,maxF);
        }
        return ans;

    }
}
